home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Texty / crackme / Kracken.txt < prev    next >
Encoding:
Text File  |  1999-04-15  |  26.8 KB  |  704 lines

  1.  
  2. ///////////////////////////////////////////////////
  3. // Willkommen zu GiGa's Cracking Tutorial        //
  4. // * GERMAN *                                    //
  5. ///////////////////////////////////////////////////
  6.  
  7. Hallo du ( du der gerade Cracken lernen will ),
  8.  
  9. Bevor es Losgeht m÷chte ein paar kleinigkeiten
  10. festlegen :
  11.  
  12. ---------------------------------------------------
  13.  
  14. 1.) Dieses Cracking Tutorial richtet sich an einen
  15.     Totalen AnfΣnger .
  16.     Es werden also keine Vorkenntnisse in ASM und
  17.     Co. gebraucht :-)
  18.  
  19. und
  20.  
  21. 2.) Ich mag es nicht , wenn man wΣhrend meines 
  22.     tut's raucht ...
  23.  
  24. ---------------------------------------------------
  25.  
  26. Sachen die ben÷tigt werden:
  27.  
  28. - SoftICE 3.x
  29. - W32Dasm 8.9
  30. - Hacker's View
  31. - Eine Dose Pepsi cola
  32. - Genⁿgend Zeit
  33. - Eine Aufl÷sung von 1024 x 768 pixeln (bitte kein WordWrap ,
  34.   weil das dann alles scheisse aussieht :P)
  35.  
  36. Es geht los ..... <freu>,<smile>,<griiiiiinnns>
  37.  
  38. Als erstes leite ich dich in die Assembler
  39. ( Kurz ASM ) Programmierung ein .
  40. Dies ist dringen Notwendig , da man ohne ASM
  41. Kentnisse nicht Cracken kann . :-(
  42.  
  43.  
  44. =(*)= Register =(*)=
  45.  
  46. Register sind sowas Σhnliches wie Variablen
  47. oder Container .
  48. Man kann in Sie Daten oder Speicher Adressen
  49. hinein packen .
  50. Von diesen Regies gibt es 16 & 32bit
  51. Version , die ich im volgenden Listing auf-
  52. gelistet habe ...
  53.  
  54. 16bit Register:
  55.  
  56. AX , BX , CX , DX , DI , BP , SP , IP , SI
  57.  
  58. 32bit Register:
  59.  
  60. EAX , EBX , ECX , EDX , EDI , EBP , ESP , EIP , ESI
  61.  
  62. =(*)= Kommandos =(*)=
  63.  
  64. Wie in jeder Programmiersprache , gibt es
  65. auch in ASM Funktionen .. diese kann man aber
  66. eigentlich nicht als solche bezeichnen ,
  67. weshalb ich Sie hier als Kommandos
  68. bezeichnen ( Liebe ASM Proofs , bitte
  69. nicht flamen :-)
  70. Da es nicht sehr klug wΣre hier alle
  71. Aufzulisten habe ich nur die genommen ,die
  72. fⁿr dich beim Cracken von bedeutung sind .
  73.  
  74. Also , volgende solltest du dir merken:
  75.  
  76. MOV
  77. SUB
  78. ADD
  79. CMP
  80. JNZ
  81. JZ
  82. JE
  83. JNE
  84. JMP
  85. PUSH
  86. CALL
  87. POP
  88. RET
  89.  
  90. ErklΣrung:
  91.  
  92. =(*)= MOV =(*)= 
  93.  
  94. steht fⁿr move , und bedeutet , verschiebe einen Wert von A nach B;
  95.  
  96. Parameter:
  97. MOV Ziel,Info
  98.  
  99. z.B. MOV EAX,Variable1
  100. oder MOV EAX,EBX
  101.  
  102. folgendes geht nicht: MOV Variable1,Variable2
  103. Es mu▀ also immer ein Register mit im Spiel sein .
  104.  
  105. =(*)= SUB =(*)=
  106.  
  107. steht fⁿr Subtraktion , und bedeutet , Ziehe von A , B ab;
  108.  
  109. Parameter:
  110. SUB Zahl,Zahl       Die zweite Zahl , wird von der ersten abgezogen;
  111.  
  112. z.B. MOV EAX,1
  113.      MOV EBX,2
  114.      SUB EBX,EAX
  115.  
  116. Das Ergebniss ist EBX = 1
  117.  
  118. Auch hier gilt , ein Register mu▀ dabei sein .
  119.  
  120. =(*)= ADD =(*)=
  121.  
  122. steht fⁿr Addieren , und bedeutet , Rechne A zu B;
  123.  
  124. Parameter:
  125. ADD Zahl,Zahl      Die zweite Zahl wird zu der ersten gezΣhlt;
  126.  
  127. z.B. MOV EAX,1
  128.      MOV EDX,1
  129.      ADD EAX,EDX
  130.  
  131. Das Ergebnis ist EAX = 2
  132.  
  133. =(*)= CMP =(*)=
  134.  
  135. steht fⁿr Compare ( zu deutsch: Vergleiche ) , CMP vergleicht
  136. zwei Register miteinander ; sehr wichtig beim Cracken !
  137.  
  138. Parameter:
  139. CMP Register1,Register2
  140.  
  141. Hier gibt es eine besonderheit ; sollten die beiden Register
  142. den gleichen inhalt haben , gibt das Kommando 0 zurⁿck .
  143. Ansonsten 1 .
  144.  
  145. 0 = Gleich        ( auf Englisch Equal )
  146. 1 = Nicht gleich  ( b.z.w. Not Equal )
  147.  
  148. z.B. MOV EAX,131561
  149.      MOV EBX,1564
  150.      CMP EAX,AB    Die Rⁿckgabe ist 1
  151.  
  152. oder MOV EAX,131561
  153.      MOV EBX,EAX   EBX = Hat jetzt den inhalt von EAX , also 131561
  154.      CMP EAX,EBX   Die Rⁿckgabe ist 0
  155.  
  156. =(*)= JNZ =(*)=
  157.  
  158. steht fⁿr Jump If not Zero , das bedeutet , springe zu A wenn der CMP
  159. vorher nicht gleich war .
  160.  
  161. Parameter:
  162. JNZ Label1
  163.  
  164. z.B. MOV EAX,112233   ; Die von dir eingebene Reg Nummer :-)
  165.      MOV EDX,65438    ; Die richtige Reg Nummer :-)
  166.      CMP EAX,EDX      ; Vergleiche die Beiden ... nicht gleicht .. also 1
  167.      JNZ WrongSerial  ; Springe wenn nicht 0 zu WrongSerial
  168.  
  169. =(*)= JZ =(*)=
  170.  
  171. steht fⁿr Jump if Zero , das bedeutet , springe zu A wenn der CMP vorher
  172. 0 zurⁿck gab , also beide Ergebnisse gleich waren .
  173.  
  174. Parameter:
  175. JZ Label1
  176.  
  177. z.B. MOV EAX,110    ; Nummer Nummer 1 <hehe>
  178.      MOV EDX,110    ; Nummer Nummer 2
  179.      CMP EAX,EDX    ; Vergleiche die Beiden ... gleich .. also 0
  180.      JZ RightSerial ; Springe wenn 0 zu RightSerial
  181.  
  182. =(*)= JE =(*)=
  183.  
  184. Tja , warum es dieses Kommando gibt es mir schleierhaft
  185. es bedeutet , Jump If Equal , also springe zu A wenn der
  186. Vorherige CMP Positiv ausging .
  187.  
  188. Kurz und bⁿndig :
  189.  
  190. JE kann man gleichsetzen mit JZ
  191.  
  192. =(*)= JNE =(*)=
  193.  
  194. Hier gilt das gleiche wie oben:
  195.  
  196. JNE ist das gleiche wie JNZ
  197.  
  198. =(*)= JMP =(*)=
  199.  
  200. steht fⁿr Jump ( das war doch wirklich ma einfach )
  201.  
  202. Parameter:
  203. JMP Label1
  204.  
  205. z.B. MOV EAX,EBX
  206.      SUB EBX,EDX
  207.      ADD EAX,5
  208.      JMP NΣchsteFunktion
  209.  
  210. Im Klaartext :
  211. Bei JMP wird immer gesprungen , egal was vorher war
  212.  
  213. =(*)= PUSH =(*)=
  214.  
  215. steht fⁿr PUSH ( muhahaha ) mit push kann man/frau daten in den
  216. stack (spezieler Daten Bereich im RAM) legen .
  217. Wird ÷fters dazu verwendet , um Parameter fⁿr ein CALL Kommando
  218. Festzulegen ( siehe Kommando Call ; kommt als nΣchstes )
  219.  
  220. Parameter:
  221. PUSH Register oder Speicheradresse
  222.  
  223. z.B. MOV EAX,15
  224.      PUSH EAX ; nun kann man EAX mit neuen daten fⁿllen , da die 
  225.               ; ursprⁿnglichen daten im RAM/Stack liegen .
  226.  
  227. =(*)= CALL =(*)=
  228. steht fⁿr CALL , das heist soviel wie rufe eine , meistens externe ,
  229. Funktione , NICHT KOMMANDO , auf .
  230.  
  231. Parameter:
  232. CALL DLL!Funktion 
  233.  
  234. Besonderheit :
  235. Sollte die aufgerufene funktion ihrerseits auch Parameter ben÷tigen
  236. werden sie vorher eingegeben !
  237.  
  238. Kleines Beispiel , fⁿr eine externe Funktion , mit Parametern :
  239.  
  240. MOV EAX,[004031F2F4]  ; EAX hat jetzt den Inhalt des RAM Speichers
  241.                       ; bei Adresse 004031F2F4 .
  242.               ; Bei dieser Adresse steht z.B. "chance"
  243. MOV ECX,[004031H9H1]  ; ECX hat jetzt en inhalt von der RAM
  244.               ; Adresse 004031H9H1 .
  245.               ; Dort steht z.B. "test"
  246. PUSH EAX          ; EAX wird in den Speicher ( Stack ) gepackt
  247. PUSH ECX          ; Auch ECX kommt in den Speicher ( Stack )
  248. CALL USER32!lstrcmpA  ; Die Externe Funktion lstrcmpA wird aus der
  249.               ; USER32.DLL ausgefⁿhrt .
  250.                       ; Diese Funktion ben÷tigt zwei Parameter .
  251.               ; Diese zwei Parameter sind EAX & ECX
  252.  
  253. Was diese Funktion macht und welche Parameter Sie braucht
  254. wird in einem spΣteren Kapitel behandelt .
  255.  
  256. =(*)= POP =(*)=
  257.  
  258. steht fⁿr POP , mit POP kann man/frau poppen <hehe>
  259. kleiner scherz .. nein mit POP kann man , frⁿher mit PUSH in den Stack
  260. gelpackte Daten , wieder in das vorherige Register packen .
  261.  
  262. Parameter:
  263. POP Register
  264.  
  265. z.B. MOV EAX,15
  266.      MOV ECX,200
  267.      PUSH EAX            ; 15 liegt jetzt im Stack
  268.      PUSH ECX            ; 200 liegt auch im Stack
  269.      CALL USER32!lstrcmpA    ; Die Funktion lstrcmpA wird aufgerufen
  270.      MOV EAX,20            ; EAX ist jetzt 20
  271.      MOV ECX,30            ; Und ECX 30
  272.      POP EAX            ; Die Daten werden wieder aus
  273.      POP ECX            ; dem Stack geholt !
  274.                 ; EAX ist jetzt wieder 15
  275.                 ; Und ECX 200
  276.  
  277. POP kann man mit einer Speicher Funktion bei Spielen vergleichen .
  278. Erst werden die daten mit PUSH gespeichert ( in den Stack ge-
  279. packt) und spΣter dann mit POP wieder herausgeholt .
  280.  
  281. =(*)= RET =(*)=
  282.  
  283. steht fⁿr RETURN , mit diesem Kommando kann man aus einer
  284. Funktion wieder zurⁿck ins Hauptprogramm springen .
  285.  
  286. Parameter:
  287. RET
  288.  
  289. z.B. MOV EAX,111111    ; EAX hat jetzt 111111 als Inhalt
  290.      CALL print        ; Die INTERNE Funktion print wird aufgerufen
  291.      
  292. START print:        ; Start der print Funktion
  293.      PUSH EAX        ; EAX wird "gespeichert"
  294.      POP  EDI        ; EDI wird "geladen"
  295.      .....        ; Irgendwelcher code
  296.      ...        ; Fⁿr uns uninteressant
  297.      RET        ; Wir springen zurⁿck zum Hauptcode
  298. END Print        ; Die Funktion print wird beendet
  299.  
  300. Solltest du in einem Programm irgemdwo mal das Kommando
  301. RET sehen , weist du automatisch das es sich um eine unter Funktion
  302. handelt .
  303.  
  304.  
  305.  
  306.  
  307. ----------------------------------------------------------------------------------------------------------
  308.  
  309. Puh .. jetzt hast du das ASM Tutorial entlich hinter dir .... :-)
  310. Und ? Bist du bereit fⁿr den zweiten Teil meines cooolen cracking
  311. tutorial's ? Ja ? Gut ! Dann geht's jetzt weiter ....
  312.  
  313. GiGa's SoftICE Installations Manual for Dummies ... <smile>
  314.     
  315. So , ich nehme mal an , da▀ du SoftICE jetzt auf deiner platte hast .
  316. Als erstes muss du es Installieren ! Dazu rufst du die Datei Setup.EXE
  317. auf , und folgst den Anweisungen .
  318. Nun , ich hoffe das du jetzt mit der GRUND Installation fertig bist .
  319. Um SoftICE nun zu Konfigurieren starte bitte das Programm : Symbol Loader
  320. Im normalfall solltest du es in der Programm Gruppe Numega SoftICE im
  321. Start Menu finden .
  322.  
  323. In diesem Programm wΣhlst du dann im Menu "Edit" den Befahl:
  324. "SoftICE Init Settings .." aus .
  325. Wenn du alles richtig gemacht hast , solltest du jetzt das SoftICE
  326. Konfig Fenster vor dir sehen . :-)
  327.  
  328. Klicke in diesem Fenster bitte auf den TAB String "Exports" , und dann
  329. auf "Add.." .
  330. In dem nun erschienen Dialog gibst du in die obere linke Textbox bitte
  331. "C:\WINDOWS\SYSTEM\Kernel32.dll" ein und drⁿckst dann Enter bzw klickst
  332. auf OK . ACHTUNG: Sollte dein Windows Verzeichnis NICHT C:\WINDOWS
  333. sein must den oben genannten Pfad abgleichen z.B. C:\WIN95\SYSTEM\Kernel32.dll !!!
  334. So denne .. das gleiche nochmal nur diesmal gibst du nicht ...\...\Kernel32.dll ein
  335. sonder User32.dll . Das machst du genauso wie oben ... . Als erstest klickste auf "Add..."
  336. dann gibst du C:\DeinWindowsDir\System\User32.dll ein und klickst auf OK bzw drⁿckst
  337. Enter .
  338.  
  339. Tada .. der erste abschnitt zur Konfiguration von SoftICE ist beendet .. !!!
  340.  
  341. HA HA .. Du dachtest wohl ich bin schon fertig mit dir .. he he ... ne ne weit 
  342. gefehlt .. jetzt kommt das fein tuning :
  343.  
  344. Klicke jetzt im SoftICE Init Settings Dialog auf den TAB String "General" .
  345. Siehst du die TextBox ⁿber der "Initialization String" steht ?
  346. Loesche den ganzen Inhalt dieser Text Box und schreibe volgendes hinein:
  347. "WD;WR;X;" ( natⁿrlich ohne die GΣnsefⁿschen ) !
  348.  
  349. JAAAAAAA !!!!!! Jetz haste die Installation beendet !!! YAHOOOO !
  350.  
  351. --------------------------------------------------------------------------------------------------------
  352.  
  353.  
  354. Sodele , hier geht es erst richtig los .
  355. Hier werde ich dir zeigen welche m÷glichkeiten es gibt , um ein
  356. Programm zu cracken :=)
  357.  
  358. GiGa's Cracking Man÷ver <The Original :-)>
  359.  
  360. Also , dann las uns mal ein paar Proggy's knacken ..
  361.  
  362.  
  363. Bevor wir uns nun daran machen , eine Seriennummer auswindig zu machen
  364. oder einen Nag Screen zu removen mⁿssen wir das Programm analysieren .
  365. Dazu schauen wir uns als erstes einmal die EXE Datei selbst an .
  366. Benutze hierzu am besten PEBrowse (findest du in der beiligenden ZIP
  367. Datei) . Starte PEB. und wΣhle dann im Menⁿ "File" den Eintrag "Load..."
  368. aus . In dem nun erschienen Dialog kannst du die Datei auswΣhlen die du
  369. Analysieren willst :)
  370. Ich habe diesem Tutorial ein , von mir geschriebenes , CrackMe beigelegt
  371. da ich hier nicht zu illegalen Handlungen anstiften m÷chte .
  372.  
  373. Also dann . ... Entpacke das CrackMe und wΣhle es in dem Load Dialog
  374. von PEBrowse aus .
  375. Schaue dir jetzt erstma alle Spaten in aller Ruhe an .
  376. Fⁿr uns in erster Linie interessant ist der "Import Section"
  377. Abschnitt .
  378. Na biste in dem Abschnitt nun endlich angekommen ?
  379. Ich will nΣmlich nicht immer auf diese Nachzⁿgler warten !! :)
  380.  
  381. Okay .. Links im Fenster siehst du verschiedene DLL's aufgelistet .
  382. Bei meinem CrackMe sollten die volgenden zu erkΣΣnen sein ..
  383. (Wenn du sie nicht sehen kannst wⁿrde ich Vorschlagen , das du 
  384. dir ne AnstΣndige Brille zulegst) :
  385.  
  386. KERNEL32.dll
  387. MFC42.DLL
  388. MSVCRT.dll
  389. USER32.dll
  390.  
  391. Die beiden mittleren (MFC42 & MSVCRT) sind fⁿr uns wiederum
  392. uninteressant . (Bei ihnen handelt es sich um die Runtime
  393. Libraries vom MS-Visual C++)
  394. Jetzt zΣΣΣΣhlen nur KERNEL und USER ...
  395. Vielleicht fΣllt dir auf , das dies auch die DLL's sind die du
  396. bei der SoftICE Installation angegeben hast :)) .
  397.  
  398. Diese beiden Dateien werden dir noch oft begegnen , also sch÷n
  399. im GedΣchniss halten .. Braves Hⁿndchen ... ;
  400.  
  401. Klick jetzt einfach mal eine der beiden Dateien an .. zB. KERNEL32.dll
  402. du siehst nun im zweiten Bereich das dort ewisse Windows Funktionen
  403. aufgelistet sind .
  404. Diese Windows Funktionen werden von meinem CrackMe verwendet .
  405.  
  406. Damit wir nun ohne Pause weitermachen k÷nnen , musst du einmal Windows
  407. neustarten , damit die Σnderungen in der winice.dat wirksam werden .
  408. Jene haste du eben mit der Grafischen benutzerfⁿhrung von SoftICE
  409. durchgefⁿhrt.
  410.  
  411. Sodele , ich nehme mal an das Windows nun neugestartet wurde !
  412. Jetzt drⁿckst du einfach mal STRG + D .
  413. Siehst du was? Jup , das SoftICE Debugger Fenster sollte nun
  414. in den Fordergrund gepushed worden sein . Nun ..aber was is das da alles ??
  415. jo .. Der Fensterabschnitt (ich nenn das jetzt einfach mal so) ganz oben
  416. stellt die Register da , erinnerst du dich noch , was Register waren??? Jo genau
  417. das sind sowas Σnliches wie Variablen .
  418. Das ganze da oben sollte ungefΣhr wie folgt aussehen:
  419.   ________________________________________________
  420. |┤                                                |
  421. | EAX = 05445D EDX = 00FFFFF ECX = 778922         |
  422. | dl = 0 df = 54 bl = 4                           |
  423.  `------------------------------------------------
  424. (Ich weiss es ist hΣsslich , aber besser bekomme ich des nich hin :)
  425.  
  426. Die Zahlen hinter den Registern geben die Speicher Addressen an , an denen die entsprechenden
  427. Daten stehen , die den Registern zugeordnet sind .
  428. Kleines Beispiel: 
  429. EAX = 05445D 
  430. ^ bedeutet das im Speicher an der Addresse 05445D das steht was in EAX ist ..zB.
  431.   steht an jener Addresse 'Blaaaa' , und weil diese Addresse EAX zugeordnet ist
  432.   steht auch in EAX 'Blaaaa' .
  433.  
  434. Wenn du an dem SoftICE Kommando Prompt nun 'D EAX' eingibst , siehst du was in EAX steht .
  435. 'D EAX' ist also das gleiche wie 'D 05445D' .
  436.  
  437. So , ich glaube das erste Fensterlein ist gut genug erklΣrt , nun kommen wir zum nΣchsten .
  438. Das nΣchste ist das dadrunter :P
  439. Das siegt ca. so aus:
  440.   ________________________________________________________
  441. |┤00045621: 04 05 06 07 08 09 10 11 12 13 14 15 Blaaaaaaa |
  442. | 00045622: 16 17 18 19 20 21 22 23 24 25 26 27 ..5dvc... |
  443. | 00045623: 28 29 30 31 32 33 34 35 36 37 38 39 ARM-45566 |
  444. | 00045623: 40 41 42 43 44 45 46 47 48 49 50 51 ......... |
  445.  `--------------------------------------------------------
  446. (jaaa... ich weiss ..des hier is auch hΣΣΣΣsssliche)
  447.  
  448. Hier kannnste sehen was gerade so im Speicher ab geht ..
  449. Wenn du wie oben beschriben beispielsweise 'D EAX' eingeben
  450. hattest , siehst du in diesem Fenster was in EAX drinne ist.
  451. Wenn du schonmal mit einem Hex editor gearbeitet hast , wird dir
  452. dieses Fenster wahrscheinlich bekannt vorkommen , mit dem kleinen
  453. unterschied das du hier nich das zeug ziehst was in einer datei ist ,
  454. sondern das was is im Speicher rum dudelt .
  455. Mehr ist hierzu nicht zusagen .
  456.  
  457. Soooooo ........ nun kommt das eigentlich wichtigste Fenster im ganzen
  458. Spiel ..pardong im .. im ..immm ???? in ... ich meine in , in SoftICE natⁿrlich .
  459. Das ... DAS .... DAS CODE FENSTER!!!! *STAUN*
  460. yupp , in diesem Fenster steht der ASM code der zur Run Time (laufzeit) von SoftICE 
  461. disassmbled wurde .
  462. Jetzt im moment werdet ihr hier wahrscheinlich nichts sehr interessantes sehen , aber wenn
  463. wir gleich mein CrackMe 'debuggen' schon ..
  464. Also dann mal los .. (eigentlich wollte ich hier noch ne skizze von dem teil hinmachen [von dem Fenster
  465. nicht vom CrackMe] , aber nun hab ich keine lust mehr:)
  466.  
  467. Du gehst nun also wieder aus SoftICE raus indem du wieder STRG + D oder F5 drⁿckst .
  468.  
  469. Nun schaust du wieder in PEBrowse und guckst dir ma an welche tollen Funktionen aus der User32.dll
  470. von meinem CrackMe so gebraucht werden .
  471. Eigentlich interessiert es mich garnich was du da findest (:P) , denn es zΣhlt fⁿr uns zurzeit erstmal
  472. nur 'GetWindowTextA' & 'GetDlgItemTextA' .
  473. Zur erklΣrung dieser beiden (und noch zwei anderer):
  474.  
  475. -----------------------------------------------------------------------------------------------------------
  476.  
  477.  
  478.  
  479. =(*)= Windows API Funktionen =(*)= 
  480.  
  481.  
  482. Windows API Funktionen sind das A & O von Windows Programmen ,
  483. es gibt kein Programm das ohne sie auskommt .
  484. Es gibt von ihnen Funktionen fⁿr das Zeichnen von Fenstern , fⁿr das Auslesen
  485. von Text Boxen , fⁿr das Vergleichen von Strings , fⁿr das Schliessen und ausfⁿhren
  486. von Programmen und und und ...
  487. By the way , API steht fⁿr Application Programming Interface .
  488.  
  489. Jetzt hier alle aufzulisten , wΣre glatter selbstmord , deshalb wie auch schon oben
  490. bei den ASM Kommandos , liste ich hier nur die notwendigen auf :
  491.  
  492. =(*)= GetDlgItemTextA =(*)=
  493.  
  494. Diese Funktion liest den Inhalt von bestimmten Bedien Elemente aus.
  495. Die Parameter sehen (laut Windows API Hilfe) wie folgt aus:
  496.  
  497. UINT GetDlgItemTextA( 
  498.  
  499. HWND hDlg, // handle of dialog box 
  500.  
  501. int nIDDlgItem, // identifier of control 
  502.  
  503. LPTSTR lpString, // address of buffer for text 
  504.  
  505. int nMaxCount // maximum size of string 
  506.  
  507. ); 
  508.  
  509. Auf die Parameter geh ich hier nicht weiter ein , denn sie sind fⁿr
  510. das was wir machen erstmal ziemlich useless , auch wenn andere 
  511. das anderes sehen .
  512.  
  513. Diese Funktion ist eine der zwei meistbenutzten API Funktionen beim cracken ,
  514. also sch÷n merken ! :P
  515.  
  516. =(*)= GetWindowTextA =(*)=
  517.  
  518. Diese Funktion ist zu 90% Σnlich mit der vorherigen , sie tut genau das gleiche.
  519. Die Paramter lauten:
  520.  
  521. int GetWindowTextA( 
  522.  
  523. HWND hWnd, // handle of window or control with text 
  524.  
  525. LPTSTR lpString, // address of buffer for text 
  526.  
  527. int nMaxCount // maximum number of characters to copy 
  528.  
  529. ); 
  530.  
  531. Genau wie oben , gehe ich hier nicht nΣher auf die Parameter ein .
  532. Und , wie ihr wahrscheinlich euch schon gedacht habt , 'jaaa' diese Funktion ist
  533. die zweite der meistbenutzten Windows API Funktionen beim Cracken .
  534.  
  535. =(*)= lstrCmpA =(*)=
  536.  
  537. Diese Funktion ist sehr 'billig' , sie vergleicht zwei Strings miteinander .
  538. die Paramter wie immer aus der Windows API Hilfe lauten wiefolgt:
  539.  
  540. int lstrCmpA( 
  541.  
  542. LPCTSTR lpString1, // address of first string 
  543.  
  544. LPCTSTR lpString2 // address of second string 
  545.  
  546. ); 
  547.  
  548. Hierbei ist zu beachten das diese Funktion genauso wie das ASM Kommando '1' oder '0'
  549. zurⁿck gibt , jenachdem ob die beiden Strings gleich sind , oder nicht ...
  550.  
  551. 0 = Gleich   (equal)
  552. 1 = Ungleich (not equal)
  553.  
  554. P.S.: Die Funktion ist hΣufig ..pardong EXTREME hΣufig bei InstallShield Serial Protections 
  555. anzutreffen , solltet ihr also mal einen InstallShield knacken wollen , nimmt einfach lstrcmpA als
  556. breakpoint (was ein breakpoint ist kommt gleich) .
  557.  
  558. =(*)= hmemcpy =(*)=
  559.  
  560. Und hier ist nun die letzte WICHTIGE Funktion , sie wird immer dann aufgerufen , wenn irgendwelche
  561. Daten verschoben werden mⁿssen , also praktisch immer .
  562. Das ist auch einer der Grⁿnde wesshalb man diese Funktion meiden sollte .
  563.  
  564. Parameter gibts hier 'keine' ..
  565. zumindest keine die uns irgendwie nⁿtzen k÷nnten .
  566.  
  567. Diese 'tolllllllllleeeeeee' Funktion mⁿsst ihr bei Programmen verwenden die in Delphi
  568. geschrieben worden sind *grummel* , denn Delphi verwendet LEIDER nicht die anderen oben genannten
  569. Funktionen.
  570. ErklΣrung zur benutzung dieser Funktion folgt .
  571.  
  572.  
  573. ------------------------------------------------------------------------------------------------------------
  574.  
  575.  
  576. So , jetzt gehts ans eingemachte , wir cracken mein CrackMe .
  577. Jenes ist extreme einfach gehalten , also nichts fⁿr Profi Cracker :P
  578.  
  579. - Startet Mein CrackMe und gebt als Name irgendwas ein , und als Serial beispielsweise '112233' .
  580.   Ich wⁿrde vorschlagen , das ihr diese Serial immmer benutzt .. denn sie einen tollen vorteil .
  581.   Und ihr wollt sicher wissen welchen , nich?? Okay ich verrate es euch .. man kann sie ganz simple in
  582.   eine HEX Zahl umwandeln , was fⁿr spΣtere Programme sehr sinnfoll ist , denn wer hat schon immer einen
  583.   Taschenrechner dabei der dezimal zahlen in Hex werte umrechnen kann :P (112233 = 31 31 32 32 33 33)
  584.  
  585. - Nun habt ihr sicher die daten eingegeben oder etwa nich??? Also ich nehme mal an das ihr es habt nun 
  586.   switched mit STRG + D zu SoftICE und gibts 'bpx GetWindowTextA' ein .
  587.   ErklΣrung: bpx = Breakpoint (zu deutsch Haltepunkt) , ihr k÷nnt SoftICE sagen , das es das System & damit auch
  588.   euer Programm anhalten soll , wenn eine bestimmte Windows API Funktion aufgerufen wird . diese Funktion k÷nnt
  589.   ihr mit bpx FunktionsName festlegen .
  590.  
  591. - So , nachdem ihr den bpx gesetzt habt geht ihr mit F5 wieder zurⁿck zu Windows & meinem CrackMe und klickt auf 'OK'
  592.   um die Serial Check Prozedur zu starten . Nun sollte SoftICE euer System anhalten und in den Fordergrund kommen.
  593.   Hier seht nun in dem Fenster mit dem disassembleten code die stelle wo er das System angehalten hat .
  594.  
  595. - Da Diese Stelle aber euch nix bringt , sondern ihr ja wissen wollt , wo GetWindowTextA aufgerufen worden ist ,
  596.   drⁿckt ihr einmal F11 (damit geht ihr zu der Stelle die GetWindowTextA aufgerufen hat) .
  597.  
  598. - Nun seht ihr im Code Fenster meinen Programm code der den Namen ausliehst ..aber was bringts denkt ihr euch nun ..
  599.   Und ihr habt recht ..nix ..ihr wollt ja die Serial Check Prozedur ..deshlab drⁿckt ihr STRG + D bzw F5 um SoftICE
  600.   zu verlassen , aber was passiert , ihr landet wieder in SoftICE und zwar diesmal da wo GetWindowTextA die zweite
  601.   Text Box ausliest , die mit der Serial , da wo ihr hinwolltet .
  602.  
  603. - SO .. ich glaube ihr wisst schon was ihr jetzt machen mⁿsst ..oder? Also als erstes drⁿckt ihr wieder F11 um zu der
  604.   Stelle zu kommen die mein Programm aufgerufen hat . Nun k÷nnt ihr mir 'D RegisterName' abfragen was in den Registern
  605.   ist . z.B. mit 'D EAX' oder 'D ECX' .
  606.  
  607. - Wenn ihr nun oben in das Register Fenster guckt , da wo all die register Aufgelistet sind , seht ihr
  608.   das bei EAX = 00000006 steht . Dies ist die lΣnge der Serial die ihr eingeben habt ..denn 112233 ist insgesammt
  609.   6 zeichen lang , wenn ihr natⁿrlich eine andere serial genommen habt ist die lΣnge dort auch anders :P
  610.  
  611. - Nun drⁿckt ihr solange F10 bis der braune Balken ⁿber dem POP nach dem CALL ist , der da als erstes steht . 
  612.   Wenn ihr genauer aufgepasst habt , ist euch sicher aufgefallen , das aufeinmal die Register 
  613.   (nicht alle aber einige) hellblau aufleuchten , das bedeutet das sich der inhalt verΣndert hat , 
  614.   gibt nun einfach mal 'D ECX' (eine der verΣnderten Register) ein , und ihr seht in dem Speicher Fenster , 
  615.   die von euch eingebene Serial *toolllllllllll* :P
  616.  
  617. - Traced nun ein stⁿckchen weiter (tracen nennt man das , wenn man mit F10 durch den Code surft) bis ihr
  618.   bei einem RET angekommen sein , na was hiess das doch gleich??? Richtig daran kann man erkennen das man in
  619.   einer Unter Funktion ist :P Also das Programm ist doch etwas gr÷sser als es am anfang scheint ;)
  620.  
  621. - Okidoki , nun weiter.. jetzt traced ihr solange weiter bis ihr bei folgender Stelle ankommt:
  622.  
  623.   xxxx:xxxxxxx   MOV EAX,[EDI+64]
  624.   xxxx:xxxxxxx   MOV ESI,00403100
  625.   xxxx:xxxxxxx   MOV DL,[EAX]
  626.   xxxx:xxxxxxx   MOV BL,[ESI]
  627.   xxxx:xxxxxxx   CMP DL,BL
  628.  
  629.   Na gefunden??? Das will ich doch schwer hoffen (ⁿberings 00403100 kann bei euch eine
  630.   andere Zahl sein (speicher Addresse) da das nich auf allen Rechnern gleich ist .
  631.   So nun zur erklΣrung des ganzen:
  632.  
  633.   Ihr denkt euch jetzt wahrscheinlich als erstes , woher weiss der GiGA , das diese stelle hier , die ist
  634.   die den Serial code vergleicht , oder?? Ganz einfach ich hab mir mit jeder zeile die ich durch getraced habe
  635.   das angeguckt , was ich gefunden hab und diese Stelle sah als einzigstes interessant aus , schon alleine
  636.   deswegen , weil hier ein CMP (Compare) vorkommt.
  637.   
  638.   Wenn ihr nun an jener Stelle angekommen seit , gibt doch einfach mal 'D EAX' ein .. na was seht ihr?
  639.   Korrekt , eure Serial (z.B. 112233) .
  640.   Nun gibt mal 'D ESI' ein ... UND .. UND ..was seht ihr nun ? Richtig , die richtige serial , ich werde sie
  641.   hier nicht hintippen , sonst ist ja der ganze spass weg!
  642.  
  643.   Jetzt werde ich den oben abgedruckten code schnipsel noch etwas genauer erlΣutern:
  644.  
  645.   MOV EAX,[EDI+64]   ;Hier wird das was im Speicher an der Addresse EDI+64 nach EAX verschoben
  646.   MOV ESI,00403100   ;Das gleiche wie oben nur das hierbei ein anderer Wert nach ESI gemoved wird
  647.   MOV DL,[EAX]       ;EAX (eure Serial) wird nach DL gepackt
  648.   MOV BL,[ESI]       ;ESI (die richtige Serial) wird nach BL gehauen
  649.   CMP DL,BL          ;DL (B÷ser Junge) wird mit BL (guter Junge) verglichen
  650.   ...                ;Auswertung des Ergebnisses , wenn der CMP 0 , also gleich , zurⁿck gibt
  651.   ...                ;kommt die 'Gute Serial' Msgbox , ansonsten die schlechte
  652.  
  653.   Na , war das schwer???
  654.   Ich hoffe ihr habt euch die richtige Serial notiert , wenn nicht ..tjo Arschkarte , alles nochmal machen :P
  655.   Sodele ich nehme mal an das ihr jetzt die richtige Serial irgendwo hingeschrieben habt , gebt jene jetzt
  656.   beim CrackMe ein ..ABER drⁿckt noch nicht auf OK ..denn wenn ihr das jetzt macht switched SoftICE wieder hoch
  657.   und das wollen wir ja nich , oder?
  658.   Also um das zuverhindern wechselt ihr zu SoftICE mit STRG + D und gibt folgendes ein -> 'BC*'
  659.   Das ganze steht fⁿr Breakpoint Clear ALL (* = ALL)  , nun k÷nnt ihr mit ruhigem gewissen SoftICE schliessen
  660.   (drⁿckt F5 oder STRG + D) und k÷nnt mit OK die Serial bestΣtigen , wenn ihr euch nicht vertippt habt ,
  661.   sollte nun die 'Yooo , peace Bruder , du hast es geschaft!' MessageBox kommen *grins*
  662.   
  663. -------------------------------------------------------------------------------------------------------------------
  664.  
  665.  
  666. =(*)= Abschliessende Worte =(*)=
  667.  
  668. jo Leute , das wars .. mein Cracking Tutorial is nu zu Ende , aber bevor ihr nun alle nach hause geht
  669. m÷chte ich euch noch folgende gute RatschlΣge auf den Weg geben :
  670.  
  671. - Versucht euch als anfΣnger nicht an Programmen mit Dongels oder Σnliches (ihr werdet wenig erfolg haben :/)
  672.  
  673. - Cracked NUR mit SoftICE , viele leute cracken ihre Programme mit W32Dasm & Hiew (Hackers View) , des ist aber
  674.   Lame (das ist nich nur meine Meinung!) , einen Jump suchen und den dann abΣndern kann jeder , deshalb brauch
  675.   man sich nich als Cracker bezeichnen.
  676.  
  677. - Benutzt nur W32Dasm & hiew , wenn es nicht anders geht , beispielsweise , wenn ihr einen Nag Screen killen
  678.   , oder ein Time Limit auschalten wollt , und es keine m÷glichkeit zur Freischaltung des Programmes gibt.
  679.  
  680. - Viele Labbern von www.fravia.org und schwΣrmen davon ..bis heute ist mir nicht klar , was an dieser Seite so
  681.   toll sein soll , also FiNGER WEG von Fravia :P
  682.  
  683. - Programme fⁿr Cracker gibts bei http://cracking.tsx.org !
  684.  
  685. - Denkt nicht , wenn ihr dieses Tutorial durchgearbeitet habt , ihr seit mit allem Wasser gewaschen ,
  686.   besorgt euch lieber viele viele andere Turorials von Beginner bis Experte um immer besser zu werden .
  687.   Und testet euer wissen auch in der Praxis , also nicht nur dumm rum labbern sondern auch cracken :P
  688.  
  689.  
  690. =(*)= Greetz & Flames =(*)=
  691.  
  692. Personal Greetz fly out to: GigaStorm , possible , NiGHT Fall , wilkins , |Marvel| 
  693.                             _eNiGMa_ , RaT , chr0me\\ , sorT8 , ratso , _NB_ ,
  694.                             PsyCHo_CC and :MARQUIS: (na kennste mich noch:)
  695.  
  696. Flames fly out to         : Flames gibtet heude nich , wollen ma nich so sein! :P
  697.  
  698.  
  699. see yaa
  700.  
  701. GiGA - USSC/THE COUNCiL - mein.onkel.is.ne@tande.com
  702.  
  703. P.S.: Mal sehen wie die Resonannnz (hups , wie schreibt man das doch gleich) auf dieses Turorial ist ,
  704.       wenn gut , schieb ich vielleich noch ein IDA Tutorial nach.